﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;

namespace CentroVentas.Clases
{
    class Permisos
    {

        public static bool getPermiso(int idUsuario, string funcion)
        {
            try
            {
                int IdFuncion = GetIdFuncion(funcion);
                DataBase bd = DataBase.GetInstance();
                DataSet ds = new DataSet();
                bd.dadap.SelectCommand = new SqlCommand("SELECT valor FROM permisos WHERE funcion = " + IdFuncion +" AND usuario = " + idUsuario, bd.Conn);
                //bd.dadap.SelectCommand.Parameters.Add(new SqlParameter("@funcion", SqlDbType.Int)).Value = IdFuncion;
                //bd.dadap.SelectCommand.Parameters.Add(new SqlParameter("@idusuario", SqlDbType.Int)).Value = idUsuario;
                bd.dadap.Fill(ds, "Permiso");
                if (ds.Tables["Permiso"].Rows.Count == 0) return false;
                return Convert.ToBoolean(ds.Tables["Permiso"].Rows[0].ItemArray[0]);                
            }
            catch (Exception)
            {
                throw;
            }
        }

        public static int GetIdFuncion(string nombre)
        {
            try
            {
                DataBase bd = DataBase.GetInstance();
                DataSet ds = new DataSet();
                bd.dadap.SelectCommand = new SqlCommand("SELECT id FROM funcion WHERE descripcion = @funcion", bd.Conn);
                bd.dadap.SelectCommand.Parameters.Add(new SqlParameter("@funcion", SqlDbType.VarChar)).Value = nombre;
                bd.dadap.Fill(ds, "idFuncion");
                if (ds.Tables["idFuncion"].Rows.Count > 0)
                {
                    return Convert.ToInt32(ds.Tables["idFuncion"].Rows[0].ItemArray[0]);
                }
                return 0;
            }
            catch (Exception)
            {
                throw;
            }
        }

        public static List<string> GetListaFunciones(string nombre)
        {
            DataBase bd = DataBase.GetInstance();
            DataSet ds = new DataSet();
            List<string> lista = null;
            bd.dadap.SelectCommand = new SqlCommand("SELECT funcion.descripcion FROM funcion WHERE descripcion LIKE '%" + nombre + "%'", bd.Conn);
            bd.dadap.Fill(ds, "Funcion");
            foreach (DataRow item in ds.Tables["Funcion"].Rows)
            {
                lista.Add(item.ToString());
            }
            return lista;
        }

        public static void CrearEstructura(TreeView Arbol)
        {
            TreeNode TAdministracionUsuarios = new TreeNode("Usuarios");
            TreeNode TAdministracionUsuariosAgregar = new TreeNode("Agregar usuarios");
            TreeNode TAdministracionUsuariosModificar = new TreeNode("Modificar usuarios");
            
            TreeNode TAdministracionPermisos = new TreeNode("Permisos");
            TreeNode TAdministracionPermisosModificar = new TreeNode("Asignar permisos usuarios");

            TreeNode TProveedores = new TreeNode("Proveedores");
            TreeNode TProveedoresAgregar = new TreeNode("Agregar proveedores");

            TreeNode TCompras = new TreeNode("Compras");
            TreeNode TComprasCrear = new TreeNode("Crear compras");
            TreeNode TComprasConfirmar = new TreeNode("Confirmar compras");
            TreeNode TComprasProductosCrear = new TreeNode("Crear productos");

            TreeNode TVentas = new TreeNode("Ventas");
            TreeNode TVentasCrear = new TreeNode("Crear ventas");
            TreeNode TVentasDescuentos = new TreeNode("Otorgar descuentos");

            TAdministracionUsuarios.Name = "FrmUsuarios";
            TAdministracionUsuariosAgregar.Name = "FunUsuariosAgregar";
            TAdministracionUsuariosModificar.Name = "FunUsuariosModificar";

            TAdministracionPermisos.Name = "FrmPermisos";
            TAdministracionPermisosModificar.Name = "FunPermisosModificar";

            TProveedores.Name = "FrmProveedores";
            TProveedoresAgregar.Name = "FunProveedoresAgregar";            

            TCompras.Name = "FrmCompras";
            TComprasCrear.Name = "FunComprasCrear";
            TComprasConfirmar.Name = "FunComprasConfirmar";
            TComprasProductosCrear.Name = "FunComprasCrearProductos";           

            TVentas.Name = "FrmVentas";
            TVentasCrear.Name = "FunVentasCrear";
            TVentasDescuentos.Name = "FunVentasDescuentos";

            Arbol.Nodes.Add(TAdministracionUsuarios);
            Arbol.Nodes.Add(TAdministracionPermisos);
            Arbol.Nodes.Add(TProveedores);
            Arbol.Nodes.Add(TCompras);
            Arbol.Nodes.Add(TVentas);

            TAdministracionUsuarios.Nodes.Add(TAdministracionUsuariosAgregar);
            TAdministracionUsuarios.Nodes.Add(TAdministracionUsuariosModificar);

            TAdministracionPermisos.Nodes.Add(TAdministracionPermisosModificar);

            TProveedores.Nodes.Add(TProveedoresAgregar);

            TCompras.Nodes.Add(TComprasCrear);
            TCompras.Nodes.Add(TComprasConfirmar);
            TCompras.Nodes.Add(TComprasProductosCrear);

            TVentas.Nodes.Add(TVentasCrear);
            TVentas.Nodes.Add(TVentasDescuentos);
        }

        public static string GetDescripcionFuncion(string funcion)
        {
            try
            {
                DataBase bd = DataBase.GetInstance();
                DataSet ds = new DataSet();
                int IdFuncion = GetIdFuncion(funcion);
                bd.dadap.SelectCommand = new SqlCommand("SELECT descrip FROM funcion WHERE id = " + IdFuncion, bd.Conn);
                //bd.dadap.SelectCommand.Parameters.Add(new SqlParameter("@funcion", SqlDbType.Int)).Value = IdFuncion;
                bd.dadap.Fill(ds, "Permiso");
                return ds.Tables["Permiso"].Rows[0].ItemArray[0].ToString();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

        public static bool SetValorPermiso(int usuario, int funcion, int valor)
        {
            try
            {
                DataBase bd = DataBase.GetInstance();
                DataSet ds = new DataSet();
                bd.conectar();
                bd.dadap.UpdateCommand= new SqlCommand("UPDATE permisos SET valor = @valor WHERE usuario = @usuario AND funcion = @funcion", bd.Conn);
                bd.dadap.UpdateCommand.Parameters.Add(new SqlParameter("@funcion", SqlDbType.Int)).Value = funcion;
                bd.dadap.UpdateCommand.Parameters.Add(new SqlParameter("@usuario", SqlDbType.Int)).Value = usuario;
                bd.dadap.UpdateCommand.Parameters.Add(new SqlParameter("@valor", SqlDbType.Int)).Value = valor;
                bd.dadap.UpdateCommand.ExecuteNonQuery();
                bd.desconectar();
                return true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return false;
            }
        }

        public static DataSet GetCantidadFunciones()
        {
            try
            {
                DataSet ds = new DataSet();
                DataBase bd = DataBase.GetInstance();
                bd.dadap.SelectCommand = new SqlCommand("SELECT id FROM funcion", bd.Conn);
                bd.dadap.Fill(ds,"Funciones");
                return ds;             
            }
            catch (Exception ex)
            {
                Utiles.Utilidades.mensaje(Utiles.TipoMensaje.ERROR, ex.Message, 121);
                return new DataSet();
            }
        }

        public static bool CrearFunciones(int IdUsuario)
        {
            try
            {
                DataSet funciones = GetCantidadFunciones();
                DataBase bd = DataBase.GetInstance();
                foreach (DataRow dr in funciones.Tables["Funciones"].Rows)
                {
                    bd.dadap.InsertCommand = new SqlCommand("INSERT INTO permisos VALUES(@funcion,@usuario,0)", bd.Conn);
                    bd.dadap.InsertCommand.Parameters.Add(new SqlParameter("@funcion", SqlDbType.Int)).Value = Convert.ToInt32(dr["id"]);
                    bd.dadap.InsertCommand.Parameters.Add(new SqlParameter("@usuario", SqlDbType.Int)).Value = IdUsuario;
                    bd.dadap.InsertCommand.ExecuteNonQuery();
                }
                return true;
            }
            catch (Exception ex)
            {
                Utiles.Utilidades.mensaje(Utiles.TipoMensaje.ERROR, ex.Message, 121);
                return false;
            }
        }
    }
}
